package main

import "fmt"

func main()  {//程序的入口
	res1:=test1(1, 2,fun5)
	fmt.Println(res1) // 3
	//test1(1,2, fun6)//fun6的函数类型和test1的形参函数类型不一致
	//test1(1,2,fun5())// fun5的返回值作为参数，类型也不是指定的函数类型
	fmt.Println(test1(10,20,fun7)) // -10

	mul := func(a int, b int) int{
		return a * b
	}
	fmt.Println(mul(2, 5))
	fmt.Println(test1(4,7,mul)) // 4*7
	//mul, mul()

	fmt.Println(test1(5,8,func (a int,b int) int{
		return a / b
	})) // 0


}

func fun5(a int, b int) int  {
	return a + b
}

func fun6(a int) string{
	return "函数6"
}

func fun7(a, b int) int{
	return a - b
}

// func () ()
// test1(整数，整数，函数) 形参名 形参类型
func test1(m int, n int, fun  func(int, int) int) int{
	fmt.Printf("%T\n",m) // int
	fmt.Printf("%T\n",n) // int
	fmt.Printf("%T\n", fun) // func(int,int)int

	return fun(m ,n) // 相当于fun5函数中 a+b   3
}


